package com.gsnd.gsnd21study.utils;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 统一结果响应（泛型版）
 */
@Data
public class Result<O> {
    /**
     * 响应的状态码
     */
    private Integer code;
    /**
     * 状态信息
     */
    private String message;
    /**
     * 数据
     */
    private O data;
    /**
     * 请求时间（时间戳）
     */
    private Long requestTime;

    /**
     * 构造器
     */
    private Result(ResultCode resultCode, O data){
        this.code = resultCode.getCode();
        this.message = resultCode.getMsg();
        this.data = data;
        this.requestTime = System.currentTimeMillis();
    }
    private Result(){}


    /**
     * 提供一些方法快速返回（泛型版）
     * 1、成功 并且不带 数据
     * 2、成功 并且携带 数据
     * 3、失败 携带失败信息 不带数据
     */
    public static <O> Result<O> success(){
        return success(null);
    }
    public static <O> Result<O> success(O data){
        return failure(ResultCode.SUCCESS,data);
    }
    public static <O> Result<O> failure(ResultCode resultCode, O data){
        return new Result<>(resultCode,data);
    }
    public static Result<?> customResultCode(Integer code, String msg){
        Result<?> result = new Result<>();
        result.setCode(code);
        result.setMessage(msg);
        result.setRequestTime(System.currentTimeMillis());
        return result;
    }
}

